﻿/*
 Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */

/**
 * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which
 *        represents a DOM document.
 */

/**
 * Represents a DOM window.
 * @constructor
 * @augments CKEDITOR.dom.domObject
 * @param {Object} domWindow A native DOM window.
 * @example
 * var document = new CKEDITOR.dom.window( window );
 */
CKEDITOR.dom.window = function (domWindow) {
    CKEDITOR.dom.domObject.call(this, domWindow);
};

CKEDITOR.dom.window.prototype = new CKEDITOR.dom.domObject();

CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,
    /** @lends CKEDITOR.dom.window.prototype */
    {
        /**
         * Moves the selection focus to this window.
         * @function
         * @example
         * var win = new CKEDITOR.dom.window( window );
         * <b>win.focus()</b>;
         */
        focus: function () {
            // Webkit is sometimes failed to focus iframe, blur it first(#3835).
            if (CKEDITOR.env.webkit && this.$.parent)
                this.$.parent.focus();
            this.$.focus();
        },

        /**
         * Gets the width and height of this window's viewable area.
         * @function
         * @returns {Object} An object with the "width" and "height"
         *        properties containing the size.
         * @example
         * var win = new CKEDITOR.dom.window( window );
         * var size = <b>win.getViewPaneSize()</b>;
         * alert( size.width );
         * alert( size.height );
         */
        getViewPaneSize: function () {
            var doc = this.$.document,
                stdMode = doc.compatMode == 'CSS1Compat';
            return {
                width: ( stdMode ? doc.documentElement.clientWidth : doc.body.clientWidth ) || 0,
                height: ( stdMode ? doc.documentElement.clientHeight : doc.body.clientHeight ) || 0
            };
        },

        /**
         * Gets the current position of the window's scroll.
         * @function
         * @returns {Object} An object with the "x" and "y" properties
         *        containing the scroll position.
         * @example
         * var win = new CKEDITOR.dom.window( window );
         * var pos = <b>win.getScrollPosition()</b>;
         * alert( pos.x );
         * alert( pos.y );
         */
        getScrollPosition: function () {
            var $ = this.$;

            if ('pageXOffset' in $) {
                return {
                    x: $.pageXOffset || 0,
                    y: $.pageYOffset || 0
                };
            }
            else {
                var doc = $.document;
                return {
                    x: doc.documentElement.scrollLeft || doc.body.scrollLeft || 0,
                    y: doc.documentElement.scrollTop || doc.body.scrollTop || 0
                };
            }
        }
    });
